package com.party.core.service.crowdfund;


import com.party.common.paging.Page;
import com.party.core.model.crowdfund.EventGradation;
import com.party.core.model.crowdfund.Project;
import com.party.core.model.crowdfund.ProjectGradation;
import com.party.core.service.IBaseService;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 多场活动众筹项目服务接口
 *
 * @Author: huangzequn
 * @Date: 2019/3/20 9:41
 */
public interface IProjectGradationService extends IBaseService<ProjectGradation> {

    /***
     * 多场活动个人排行榜，速度
     * @param page
     * @param
     * @return
     */
    List<ProjectGradation> speedList(Map<String, String> params, Page page);


    /***
     * 个人排行榜  自己的个人信息
     * @param
     * @return
     */
    ProjectGradation popularity(Map<String, String> params, String type);

    /***
     * 查询该项目下的所有报名人员
     * @param targetId
     * @param page
     * @return
     */
    List<Project> getProjectByActivityId(String targetId, Page page);

    /***
     * 查询该主题下的所有报名人员
     * @param eventId
     * @param page
     * @return
     */
    List<Project> queryProjectByTargetId(String eventId, Page page);

    /**
     * * 找出所有报名者已消费的总金额，比如说当前系统时间是第三阶段，则需要找出第一第二阶段的目标金额
     *  并且加条件过滤出来   第一第二阶段标记已参赛的  或者 有阶段筹满时间的
     * @param params
     * @return
     */
    List<ProjectGradation> getProjectGradationByTargetId(Map<String, Object> params);


    /***
     * 根据eventGradationId找到ProjectGradation
     * @param eventGradationId
     * @return
     */
    ProjectGradation getByEventGradationId(String eventGradationId,String projectId);


    /**
     * @param projectId 众筹id
     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     * @Author yifeng
     * @Description 根据众筹id查每个阶段数据
     * @Date 10:24 2019/3/22
     **/
    List<Map<String,Object>> listForProjectId(String projectId);

    /**
     * @param projectGradation
     * @return com.party.core.model.crowdfund.ProjectGradation
     * @Author yifeng
     * @Description 获取唯一的众筹阶段信息
     * @Date 11:22 2019/3/22
     **/
    ProjectGradation getUnique(ProjectGradation projectGradation);

    /**
     * @param endTime   截止时间
     * @param projectId 众筹id
     * @return java.lang.Double
     * @Author yifeng
     * @Description 获取众筹的阶段前有效的累计金额
     * @Date 9:41 2019/3/25
     **/
    Double getEffectiveAmount(Date endTime, String projectId);

    /**
     * @param eventId 主题id
     * @return
     * @Author yifeng
     * @Description 已消费的金额
     * @Date 16:21 2019/3/25
     **/
    Double getConsumedAmount(String eventId);

    /**
     * @param projectId 众筹id
     * @return
     * @Author yifeng
     * @Description 获取成功的众筹阶段
     * @Date 11:29 2019/3/28
     **/
    List<ProjectGradation> getSuccessListForProjectId(String projectId);

    List<ProjectGradation> findByProjectId(String projectId);

    /**
     * @param projectId 众筹id
     * @return java.lang.Integer
     * @Author yifeng
     * @Description 获取众筹的有效阶段数
     * @Date 9:41 2019/3/25
     **/
    Integer getEffectiveCount(String projectId);

    /**
    * @Author hzq
    * @Description //获取当前众筹者正在众筹阶段的后面所有阶段
    * @Date 15:30 2019/4/18
    * @param ongoingGradation
    * @return
    **/
    List<ProjectGradation> getAfterProjectGradations(EventGradation ongoingGradation,String projectId);

    /**
    * @Author hzq
    * @Description //根据当前阶段找到上一阶段
    * @Date 15:48 2019/4/18
    * @param ongoingProjectGradation
    * @return
    **/
    ProjectGradation getTheNextGradation(ProjectGradation ongoingProjectGradation);
}
